package xyz.molzhao.cfapi;

import xyz.molzhao.util.CommonUtil;

import java.util.concurrent.CompletableFuture;

/**
 * 场景：
 * 小明走出餐厅，到公交站，现在两个公交车都能回家一个700路一个800路。
 * 现在小明是哪路先来就做哪路，用代码如何描述？
 *
 * applyToEither上个任务和这个任务一起运行，那个先运行，就把任务结果交给Function
 */
public class ApplyToEither {
    public static void main(String[] args) {
        CommonUtil.createBehavior("小明走出餐厅， 来到公交站");
        CommonUtil.createBehavior("等待 700路 或者 800路 公交到来");

        CompletableFuture<String> bus = CompletableFuture.supplyAsync(() -> {
            CommonUtil.createBehavior("700路公交车正在赶来。。", 2000);
            return "700路公交到了";
        }).applyToEither(CompletableFuture.supplyAsync(() -> {
            CommonUtil.createBehavior("800路公交车正在赶来。。", 1000);
            return "800路公交到了";
        }), first -> first);

        CommonUtil.createBehavior(String.format("%s,小明坐车回家", bus.join()));
    }
}
